import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'

// Vue构造函数
function Vue (options) {
  // 判断是否通过new 关键字调用Vue()
  if (process.env.NODE_ENV !== 'production' &&
    !(this instanceof Vue)
  ) {
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  // 调用Vue.prototype._init方法,
  this._init(options)
}

// 定义Vue.prototype._init 方法
initMixin(Vue)
// 给个Vue 构造函数的prototype上挂载 $data,$props,$del,$set,$watch
stateMixin(Vue)

//  给个Vue 构造函数的prototype添加 事件相关的静态方法, ($on, $off, $emit, $once)
eventsMixin(Vue)
//  给个Vue 构造函数的prototype添加 生命周期相关的方法 (_.updata, $destroy, $forceUpdate)
lifecycleMixin(Vue)

//  给个Vue 构造函数的prototype添加 rander相关的方法(_b,_d,....)
renderMixin(Vue)

export default Vue
